﻿Imports System.IO
Imports Microsoft.VisualBasic
Imports System.Xml.Serialization
Imports PowerTools
Namespace Classes
    Module Chargements

        'Variables pour le décryptage
        Private Const PASSWORD As String = "donjonetdragonv4.0"

        ReadOnly Property CheminXMLs As String
            Get
                Return Path.Combine(Application.StartupPath, "Xml")
            End Get
        End Property


        Public Structure eToDo
            Dim sToDo As String
            Dim iPriorite As ePriorite '0 - Critique, 1 - Majeur, 2 - Mineur, 3 - Amelioration, 4 - Cosmetique
            Dim bTermine As Boolean
            Dim dtDateFin As Date

        End Structure


        'Déclaration de la structure des versions
        Public Structure eVersion
            Dim sVersion As String
            Dim sLibelle() As String
        End Structure


        'Déclaration de la structure des ToDos
        Enum ePriorite
            Critique = 0
            Majeure = 1
            Mineure = 2
            Amelioration = 3
            Cosmetique = 4
        End Enum
        Public MesDefinitions As New Definitions
        Public HistoVersion() As eVersion
        Public HistoToDo() As eToDo
        Public Sub ChargeToDos()
            On Error GoTo Err_ChargeToDos
            'Déclaration des variables
            Dim i As Long

            'Liste des ToDos
            '		 Critique = 0
            '        Majeure = 1
            '        Mineure = 2
            '        Amelioration = 3
            '        Cosmetique = 4
            i = 1
            ReDim Preserve HistoToDo(i)
            HistoToDo(i).sToDo = "Pour la v 3.0.0, ajouter les cases dans la saisie/modification des pouvoirs persos et dans le fichier"
            HistoToDo(i).iPriorite = ePriorite.Critique
            HistoToDo(i).bTermine = True
            HistoToDo(i).dtDateFin = "18/03/2010"
            i = i + 1
            ReDim Preserve HistoToDo(i)
            HistoToDo(i).sToDo = "Pour la v 3.1.0, faire les images pour les mots clés forme animale et esprit"
            HistoToDo(i).iPriorite = ePriorite.Critique
            HistoToDo(i).bTermine = False
            'HistoToDo(i).dtDateFin = "01/01/1900"
            i = i + 1
            ReDim Preserve HistoToDo(i)
            HistoToDo(i).sToDo = "Pour la v 3.1.0, faire les images pour les actions d'opportunités"
            HistoToDo(i).iPriorite = ePriorite.Critique
            HistoToDo(i).bTermine = False
            'HistoToDo(i).dtDateFin = "01/01/1900"
            i = i + 1
            ReDim Preserve HistoToDo(i)
            HistoToDo(i).sToDo = "Ajout d'une possibilité de décalage manuel pour les dos des cartes."
            HistoToDo(i).iPriorite = ePriorite.Majeure
            HistoToDo(i).bTermine = True
            HistoToDo(i).dtDateFin = "18/03/2010"
            i = i + 1
            ReDim Preserve HistoToDo(i)
            HistoToDo(i).sToDo = "Ajout de zones de saisie des bonus de caracteristique."
            HistoToDo(i).iPriorite = ePriorite.Amelioration
            HistoToDo(i).bTermine = False
            'HistoToDo(i).dtDateFin = "01/01/1900"
            i = i + 1
            ReDim Preserve HistoToDo(i)
            HistoToDo(i).sToDo = "Ajout d'un choix d'édition des cartes avec ou sans bonus dans le texte."
            HistoToDo(i).iPriorite = ePriorite.Amelioration
            HistoToDo(i).bTermine = False
            'HistoToDo(i).dtDateFin = "01/01/1900"
            i = i + 1
            ReDim Preserve HistoToDo(i)
            HistoToDo(i).sToDo = "Ajout d'un critère de recherche par nom de pouvoir (partie du nom)."
            HistoToDo(i).iPriorite = ePriorite.Majeure
            HistoToDo(i).bTermine = False
            'HistoToDo(i).dtDateFin = "01/01/1900"
            i = i + 1

Exit_ChargeToDos:
            Exit Sub

Err_ChargeToDos:
            MessageBox.Show("Erreur dans ChargeToDos (" & gsVersion & ")" & System.Environment.NewLine & Err.Description)
            GoTo Exit_ChargeToDos
        End Sub

        Public Sub ChargeVersions()
            On Error GoTo Err_ChargeVersions
            'Déclaration des variables
            Dim i As Long

            i = 1

            ReDim Preserve HistoVersion(i)
            HistoVersion(i).sVersion = "v 3.0.0"
            ReDim Preserve HistoVersion(i).sLibelle(3)
            HistoVersion(i).sLibelle(1) = "- Ajout du choix de theme : DnD Power ou 4E-UCS-Thin-Vertical"
            HistoVersion(i).sLibelle(2) = "- Correction d'un plantage si un texte est vide"
            HistoVersion(i).sLibelle(3) = "- Ajout d'une possibilité de décalage manuel pour les dos des cartes."
            i = i + 1
            ReDim Preserve HistoVersion(i)
            HistoVersion(i).sVersion = "v 2.0.3"
            ReDim Preserve HistoVersion(i).sLibelle(1)
            HistoVersion(i).sLibelle(1) = "- Correction d'une coupure si les mots clés étaient trop long"
            i = i + 1
            ReDim Preserve HistoVersion(i)
            HistoVersion(i).sVersion = "v 2.0.2"
            ReDim Preserve HistoVersion(i).sLibelle(1)
            HistoVersion(i).sLibelle(1) = "- Ajout de la sélection total des pouvoirs"
            i = i + 1
            ReDim Preserve HistoVersion(i)
            HistoVersion(i).sVersion = "v 2.0.1"
            ReDim Preserve HistoVersion(i).sLibelle(4)
            HistoVersion(i).sLibelle(1) = "- Correction d'un problème avec les Style de combat"
            HistoVersion(i).sLibelle(2) = "- Correction d'un problème dans l'enregistrement et le chargement des critères"
            HistoVersion(i).sLibelle(3) = "- Harmonisation de la gestion des erreurs (ajout d'informations dans les erreurs éventuelles)"
            HistoVersion(i).sLibelle(4) = "- Ajout des dos des cartes (typés selon le type de carte)"
            i = i + 1

Exit_ChargeVersions:
            Exit Sub

Err_ChargeVersions:
            MessageBox.Show("Erreur dans ChargeVersions (" & gsVersion & ")" & System.Environment.NewLine & Err.Description)
            GoTo Exit_ChargeVersions
        End Sub

        ''' <summary>
        ''' Chargement du fichier de definitions.
        ''' </summary>
        ''' <param name="fichier">fichier.</param>
        ''' <returns>Vrai si tout va bien</returns>
        Public Function ChargerDefinitions(ByVal fichier As String) As Boolean
            Try

                If (Not File.Exists(fichier)) Then
                    Exit Function
                End If
                'Dim x As New XmlSerializer(MesDefinitions.GetType)
                'Dim objStreamReader As New StreamReader(fichier, System.Text.Encoding.UTF8)
                'Dim sr As String = objStreamReader.ReadToEnd
                'MesDefinitions = x.Deserialize(objStreamReader)
                'objStreamReader.Close()
                MesDefinitions = Definitions.LoadFromFile(fichier)


            Catch ex As Exception
                MessageBox.Show(ex.Message + Environment.NewLine + ex.InnerException.Message, "Ereur fatale", MessageBoxButtons.OK, MessageBoxIcon.Stop)
                Return False
            End Try
            Return True
        End Function

        Public Function ChargerFichierPouvoirs(fichier As String) As PouvoirsXML
            Dim clsDecrypt As RC4 = Nothing
            Dim currentPouvoirs As New PouvoirsXML, gsDecryptFileName As String
            Dim officiel As Boolean = fichier.EndsWith(".dat", StringComparison.InvariantCultureIgnoreCase)
            If officiel Then
                clsDecrypt = New RC4
                'On décrypte le fichier en entrée
                clsDecrypt.Key = PASSWORD
                gsDecryptFileName = Path.GetTempFileName()
                clsDecrypt.DecryptFile(fichier, gsDecryptFileName)
            Else
                gsDecryptFileName = fichier
                Dim reader As New StreamReader(gsDecryptFileName)
                Dim temp As String = reader.ReadLine()
                temp = reader.ReadLine
                reader.Close()
                If (temp.Contains("PouvPerso")) Then 'Ancienne version, nécessite conversion
                    MsgBox("Fichier perso trop ancien, contactez nous pour la conversion")
                    Return Nothing
                    'Dim pouvperso As New PouvPerso
                    'Dim xOld As New XmlSerializer(pouvperso.GetType)
                    'reader = New StreamReader(gsDecryptFileName, System.Text.Encoding.UTF8)
                    'pouvperso = xOld.Deserialize(reader)
                    'reader.Close()
                    'currentPouvoirs = New PouvoirsXML
                    'currentPouvoirs.Créé_le = pouvperso.Créé_le
                    'currentPouvoirs.Version = pouvperso.version
                    'For Each pouv In pouvperso.pouvoir
                    '    Dim pouvoirN As PouvoirsXMLPouvoir = New PouvoirsXMLPouvoir(pouv)
                    '    pouvoirN.Id = Pouvoirs.pouvoir.Count + 1
                    '    pouvoirN.idpouvoir = pouvoirN.Id
                    '    currentPouvoirs.pouvoir.Add(pouvoirN)
                    'Next
                    'File.Move(gsDecryptFileName, Path.ChangeExtension(gsDecryptFileName, ".bak"))
                    'currentPouvoirs.nombrepouvoir.Add(New PouvoirsXMLNombrepouvoir())
                    'currentPouvoirs.nombreaptitude.Add(New PouvoirsXMLNombreaptitude())
                    'currentPouvoirs.nombretrait.Add(New PouvoirsXMLNombretrait())
                    'currentPouvoirs.SauverXML(gsDecryptFileName)
                End If
            End If
            Dim x As New XmlSerializer(currentPouvoirs.GetType)
            Dim objStreamReader As New StreamReader(gsDecryptFileName, System.Text.Encoding.BigEndianUnicode)
            currentPouvoirs = x.Deserialize(objStreamReader)
            For Each p As PouvoirsXMLPouvoir In currentPouvoirs.pouvoir
                p.Fichier = currentPouvoirs
            Next
            objStreamReader.Close()
            If officiel AndAlso File.Exists(gsDecryptFileName) Then
                File.Delete(gsDecryptFileName) 'on a donc décodé un fichier en temp
            End If
            'currentPouvoirs.Officiel = officiel
            'If currentPouvoirs.Titre = TitreOfficiel Then currentPouvoirs.Officiel = True
            Return currentPouvoirs
        End Function
    End Module
End Namespace